#include<stdio.h>
#include<stdlib.h>
#include<string.h>

/*
函数简介
	用于得到文件位置指针当前位置相对于文件首的偏移字节数。
		函数名
		ftell
	函数原型
		long ftell(FILE *stream);
	函数功能
	使用fseek函数后再调用函数ftell()就能非常容易地确定文件的当前位置。
*/

FILE *in,*out;
char filename[50],cfilename[50];
void space()
{
	//分割出来的文件扩展名
	char ext[6][6]=
	{
		"A.txt","B.txt","C.txt","D.txt","E.txt","F.txt"
	};
	unsigned long int n=1,k,byte=0;
	unsigned int j=0,i=0;
	char ch;
	printf("please input filename:\n");
	scanf("%s",filename);
	strcpy(cfilename,filename);//输入文件所在路径及名称并复制到cfilename中
	if((in=fopen(filename,"r"))==NULL)
	{
		printf("fopen error!\n");
		exit(0);
	}
	printf("please input file size after space(kb):\n");
	scanf("%lud",&n);//输入分割后单个文件的大小
	n=n*1024;
	while(filename[j]!='.')
		j++;
	filename[j]='\0';	//遇到'.'时，在该处加字符串结束符
	if((out=fopen(strcat(filename,ext[i]),"w+"))==NULL)
	{
		printf("fopen error!\n");
		exit(0);
	}
	fseek(in,0,2);//将位置指针移到文件末尾
	k=ftell(in);//k存放当前位置，也就是整个文件的大小
	printf("\n\n%s的文件大小：%lu\n\n",filename,k);
	fseek(in,0,0);
	while(k>0)
	{
		//从输入文件中读取数据放到分割文件中去
		ch=fgetc(in);
		fputc(ch,out);
		
		byte++;//字节数自增
		k--;
		if(byte==n)//当为要求的大小时执行括号内语句
		{
			fclose(out);//完成一个分割出的文件
			byte=0;
			strcpy(filename,cfilename);
			while(filename[j]='\0')
				j++;
			filename[j]='\0';	//遇到'.'时，在该处加字符串结束符
			i++;
			if((out=fopen(strcat(filename,ext[i]),"w"))==NULL)
			{
				printf("fopen error!\n");
				exit(0);
			}
		}
	}
	fclose(in);
	printf("File succeed space!\n\n\n");
}
int main()
{
	space();


	return 0;
}
